`timescale 1ns/1ps

`define   xlen              63:0
`define   BUSLEN            63:0
`define   INSTLEN           31:0
`define   PC_START          64'h00000000_80000000 
`define   ZERO_WORD         64'h00000000_00000000

`define   no_jorb           1'b0
`define   jorb              1'b1

`define   R_type            5'b011?0
`define   B_type            5'b11000
`define   S_type            5'b01000
`define   J_type            5'b11011
`define   U_type            5'b0?101
`define   privileged        5'b11100

`define   imm_I_s_extend    3'b000
`define   imm_I_s_w_extend  3'b001 
`define   imm_I_ns_extend   3'b010
`define   imm_B_extend      3'b011
`define   imm_S_extend      3'b100
`define   imm_U_extend      3'b101 
`define   imm_J_extend      3'b110
`define   imm_noextend      3'b111

`define   pc                2'b00
`define   regbusA           2'b01
`define   zext_bitsel_rs1   2'b10
`define   sext_bitsel_rs1   2'b11

`define   regbusB           2'b10
`define   immbus            2'b00
`define   const4            2'b01
`define   zext_bitsel_rs2   2'b11

`define   notbranch         3'b010
`define   eq                3'b000
`define   ne                3'b001
`define   lt                3'b100
`define   ge                3'b101
`define   ltu               3'b110
`define   geu               3'b111

`define   add               3'b000
`define   sub               3'b001
`define   and               3'b010
`define   or                3'b011
`define   xor               3'b100
`define   sll               3'b101
`define   srl               3'b110
`define   sra               3'b111

`define   CF                flags[0]
`define   SF                flags[1]
`define   OF                flags[2]
`define   ZF                flags[3]

`define   SEXT8             3'b000
`define   SEXT16            3'b001
`define   SEXT32            3'b010
`define   ZEXT8             3'b100
`define   ZEXT16            3'b101
`define   ZEXT32            3'b110
`define   NOEXT             3'b011
